home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
fdimg
/
—‹Œêsrc.lzh
/
help.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-10-23
|
3KB
|
152 lines
#include "3DDEF.H"
#include "GLOBAL.H"
#include "FORWARD.H"
#include "XCODE.H"
#include "doslib.h"
#define KIIRO_REV 10 /* 黄色のリバース */
#define MIZU_REV 9 /* 水色のリバース */
extern UBYTE argv0[MAXLINE];
void
help()
{
STR hp;
UBYTE hpbody[MAXLINE];
FILE *hfp;
struct NAMECKBUF inf;
int size1,size2;
int flag;
if ((hp = (STR)getenv("TWPATH")) || (hp = (STR)getenv("twpath"))) {
/* 環境指定があった */
strcpy(hpbody,hp);
strcat(hpbody,"TW.HLP");
}
if (hfp = fopen((char *)hpbody,"rb")) { /* HLP ファイルがあった */
} else { /* そこにないなら、TW.X のあった所を捜す */
NAMECK(argv0,&inf);
strncpy(hpbody,inf.drive,2);
hpbody[2] = EOS;
strcat(hpbody,inf.path); /* パスを得る */
strcat(hpbody,"TW.HLP");
if (hfp = fopen((char *)hpbody,"rb")) { /* HLP ファイルがあった */
} else { /* そこにないなら、カレントを捜す */
hfp = fopen("TW.HLP","rb");
}
}
if (!hfp) {
etc_beep();
error("[ヘルプファイルが見つかりません]");
return;
}
/* 最初の ! まで読み飛ばす */
flag = 0;
while(1) {
UBYTE w[MAXLINE];
if (feof(hfp)) {
break;
}
fgets(w,MAXLINE,hfp);
if (!strcmp(w,"!\x0d\x0a")) {
flag = 1;
break;
}
}
if (!flag) { /* ! がない */
error("[ヘルプファイルが異常です]");
return;
}
size1 = ftell(hfp);
if (CMDMOD) { /* ED モードである */
flag = 0;
while(1) { /* 次の ! まで読み飛ばす,,, */
UBYTE w[MAXLINE];
if (feof(hfp)) {
break;
}
fgets(w,MAXLINE,hfp);
if (!strcmp(w,"!\x0d\x0a")) {
flag = 1;
break;
}
}
if (!flag) { /* ! がない */
error("[ヘルプファイルが異常です]");
return;
}
size2 = ftell(hfp) - size1;
fseek(hfp,size1,SEEK_SET); /* ! の後へもどる */
help0(hfp,size2-3);
} else {
fseek(hfp,0,SEEK_SET); /* 先頭へシークする */
help0(hfp,size1-3);
}
}
void
help0(FILE *fp,int size)
{
char HELP_MESS[size];
register char *p;
register int y;
register UINT c;
char s[MAXLINE];
fread(HELP_MESS,1,size,fp);
HELP_MESS[size] = EOS;
p = HELP_MESS;
while(1) {
if (!*p) {
p = HELP_MESS;
}
/*
window0();
printf("[%x][%x][%x][%x][%x]",p[0],p[1],p[2],p[3],p[4]);
binkey();
*/
init_clear_screen();
/* etc_func_off();*/
y = 0;
while(1) {
if ((p[0] == '-') && (p[1] == '\x0d') && (p[2] == '\x0a')) {
p += 3;
B_LOCATE(0,YWIDTH0-2);
/* etc_color(KIIRO_REV);*/
B_PRINT("\t\t\x1b[32m([HELP], ^G or ESC を押すと元の編集画面に戻ります)\x1b[m");
/* etc_color(NORMAL);*/
etc_while_fep_qxf(); /* 離されるまで待つ */
c = fep_INKEY_wait();
if ((c == FEP_HELP_CODE) || (c == 'G'-'@') || (c == '\x1b')) {
/* ctrl_l();*/
/* etc_func_on();*/
return;
}
break;
} else {
p = help_sub(p,s);
B_LOCATE(0,y++);
B_PRINT(s);
}
}
}
}
char *
help_sub(char *p, char *s)
{
while(*p != '\n') {
*s++ = *p++;
}
*s = EOS;
return(++p);
}